package pe.bf.extranet.ejb;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.ejb.LocalBean;
import javax.ejb.Singleton;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.sql.DataSource;

import pe.bf.domain.bean.Empleado;
import pe.bf.domain.bean.SolicitudCreacion;
import pe.bf.domain.constantes.Constantes;
import pe.bf.domain.exceptions.DomainException;
import pe.bf.extranet.dao.SolicitudCreacionDAO;
import pe.bf.extranet.dao.impl.SolicitudCreacionDAOImpl;

/**
 * Session Bean implementation class SolicitudCreacionEJB
 */
@WebService
@Singleton
@LocalBean
public class SolicitudCreacionEJB {

	@Resource(name = Constantes.JNDI_DATASOURCE)
	public DataSource dataSource;

	private SolicitudCreacionDAO solicitudCreacionDAO;

	/**
	 * Default constructor.
	 */
	public SolicitudCreacionEJB() {

	}

	/**
	 * 
	 * @param solicitudCreacion
	 */
	@WebMethod
	public List<String> createSolicitudCreacion(
			SolicitudCreacion solicitudCreacion) {
		List<String> solicitudCreacionPersist = new ArrayList<String>();
		try {
			solicitudCreacionPersist = solicitudCreacionDAO
					.createSolicitudCreacion(solicitudCreacion);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return solicitudCreacionPersist;
	}

	/**
	 * 
	 * @param solicitudCreacion
	 * @throws DomainException
	 */
	@WebMethod
	public void actualizarSolicitudCreacion(SolicitudCreacion solicitudCreacion)
			throws DomainException {
		solicitudCreacionDAO.actualizarSolicitudCreacion(solicitudCreacion);
	}

	/**
	 * 
	 * @param solicitudCreacion
	 * @throws DomainException
	 */
	@WebMethod
	public void eliminarSolicitudCreacion(SolicitudCreacion solicitudCreacion)
			throws DomainException {
		solicitudCreacionDAO.eliminarSolicitudCreacion(solicitudCreacion);
	}

	/**
	 * 
	 * @return
	 * @throws DomainException
	 */
	@WebMethod
	public List<SolicitudCreacion> listarSolicitudCreacion()
			throws DomainException {
		return solicitudCreacionDAO.listarSolicitudCreacion();
	}

	/**
	 * 
	 * @param codigoEmpresa
	 * @return
	 * @throws DomainException
	 */
	@WebMethod
	public List<SolicitudCreacion> listarSolicitudCreacionPorEmpresa(
			BigInteger codigoEmpresa) throws DomainException {
		try {
			return solicitudCreacionDAO
					.listarSolicitudCreacionPorEmpresa(codigoEmpresa);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}

	}

	/**
	 * 
	 * @param codigoEmpresa
	 * @param codigoSolicitudCreacion
	 * @return
	 * @throws DomainException
	 */
	@WebMethod
	public List<Empleado> listarDetalleSolicitudCreacion(
			BigInteger codigoEmpresa, BigInteger codigoSolicitudCreacion)
			throws DomainException {
		return solicitudCreacionDAO.listarDetalleSolicitudCreacion(
				codigoEmpresa, codigoSolicitudCreacion);
	}

	/**
	 * 
	 */
	@PostConstruct
	public void init() {
		solicitudCreacionDAO = new SolicitudCreacionDAOImpl(dataSource);
	}
}
